package UI;

import Bean.User;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class LoginUI extends JFrame implements ActionListener {
    private JTextField userField; // 用户名输入框
    private JPasswordField passwordField;   // 密码输入框
    private JButton registerBtn;    // 注册按钮
    private JButton loginBtn;   // 登录按钮

    // 静态用户信息。
    private static ArrayList< User > allusers = new ArrayList<>();

    // 静态测试用户信息初始化
    static {
        allusers.add(new User("超级管理员", "admin", "123456"));
        allusers.add(new User("张三", "zhangsan", "qwerty"));
    }

    public LoginUI() {
        // 设置窗口标题
        super("人事管理系统 - 登录");
        this.setSize(450, 300);
        this.setLocationRelativeTo(null);
        // 设置窗口关闭操作
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        createAndShowGui();

    }

    private void createAndShowGui() {
        // 创建主面板
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BorderLayout(10, 20));
        mainPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

        // 创建标题标签
        JLabel titleLabel = new JLabel("人事管理系统", SwingConstants.CENTER);
        titleLabel.setFont(new Font("楷体", Font.BOLD, 24));
        titleLabel.setForeground(new Color(0, 70, 140));

        // 创建表单面板
        JPanel formPanel = new JPanel();
        formPanel.setLayout(new GridLayout(2, 2, 10, 15));
        formPanel.setBorder(BorderFactory.createEmptyBorder(15, 30, 15, 30));

        // 用户名组件
        JLabel userLabel = new JLabel("用户名:");
        userLabel.setFont(new Font("楷体", Font.PLAIN, 14));
        userField = new JTextField(15);

        // 密码组件
        JLabel passLabel = new JLabel("密码:");
        passLabel.setFont(new Font("楷体", Font.PLAIN, 14));
        passwordField = new JPasswordField(15);

        // 添加到表单面板
        formPanel.add(userLabel);
        formPanel.add(userField);
        formPanel.add(passLabel);
        formPanel.add(passwordField);

        // 创建按钮面板
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 30, 10));

        // 创建按钮
        registerBtn = new JButton("注册");
        registerBtn.setFont(new Font("楷体", Font.PLAIN, 14));
        registerBtn.setPreferredSize(new Dimension(100, 35));
        registerBtn.setBackground(new Color(70, 130, 180));
        registerBtn.setForeground(Color.WHITE);
        // 监听按钮点击事件
        registerBtn.addActionListener(this);

        loginBtn = new JButton("登录");
        loginBtn.setFont(new Font("楷体", Font.PLAIN, 14));
        loginBtn.setPreferredSize(new Dimension(100, 35));
        loginBtn.setBackground(new Color(34, 139, 34));
        loginBtn.setForeground(Color.WHITE);
        // 监听按钮点击事件
        loginBtn.addActionListener(this);

        // 添加到按钮面板
        buttonPanel.add(registerBtn);
        buttonPanel.add(loginBtn);

        // 添加组件到主面板
        mainPanel.add(titleLabel, BorderLayout.NORTH);
        mainPanel.add(formPanel, BorderLayout.CENTER);
        mainPanel.add(buttonPanel, BorderLayout.SOUTH);

        // 添加主面板到窗口
        this.add(mainPanel);

        // 设置窗口大小并居中
        this.setSize(450, 300);
        this.setLocationRelativeTo(null);

        // 显示窗口
        this.setVisible(true);
    }

    @Override
    public void actionPerformed( ActionEvent e ) {
        // 这里可能是登录按钮过来的，也可能是注册按钮过来
        // 判断是登陆还是注册跳转
        if (e.getSource() == loginBtn) {
            login();
        }else{
            System.out.println("注册功能开始");
        }
    }

    private void login(){
        // 获取用户名密码
        String useraccount = userField.getText();
        String password = new String(passwordField.getPassword());
        // 和系统用户信息对比
        User user =queryUserByUserAccount( useraccount);
        if (user != null){
            if (user.getPassword().equals(password)) {
                // 登录成功
                System.out.println("登录成功");
                // 跳转到员工管理界面
                new EmployeeManagementSystem(user.getUsername());
                this.dispose();
            }else {
                JOptionPane.showMessageDialog(this, "密码错误");
            }
        }else{
            JOptionPane.showMessageDialog(this, "用户不存在");
        }
    }

    // 根据登录名去查询对象方法返回，查询到用户对象，说明登录名称正确。
    private User queryUserByUserAccount( String userAccount ){
        for ( int i = 0; i < allusers.size(); i++ ) {
            User user = allusers.get(i);
            if ( user.getUseraccount().equals(userAccount) ) {
                return user;
            }
        }
        return null;
    }
}